/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agentes;

import jade.content.lang.Codec;
import jade.content.lang.sl.SLCodec;
import jade.content.onto.Ontology;
import jade.core.Agent;
import jade.core.behaviours.Behaviour;
import jade.domain.df;
import jade.domain.FIPAAgentManagement.AMSAgentDescription;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
//import jade.gui.*;
import jade.wrapper.AgentController;
import jade.wrapper.ControllerException;
import java.util.logging.Level;
import java.util.logging.Logger;

import vista.Material2;

import Ontologia.*;
import jade.content.ContentElement;
import jade.content.onto.OntologyException;
import jade.content.onto.UngroundedException;
////////////////////////////
//En este caso la clase puede implementar ontologias mediante la 
//sentencia implements <<nombre de la ontologia>> //////////////////////////////////////////////////////////////

public class SeguidorContenido extends Agent{
    
 
    private Codec codec = new SLCodec();
    private Ontology ontologia = OAOntology.getInstance();
    private AgentController seguidorAg;
    Material2 vistaMaterialCurso; 
    
   
    protected void setup(){
        getContentManager().registerLanguage(codec);
//        getContentManager().registerOntology(ontologia);
        jade.wrapper.AgentContainer containerController = this.getContainerController();
         // Enable O2A communication
        setEnabledO2ACommunication(true, 0);
        
        try {
            seguidorAg = containerController.getAgent("Seguidor");
        } catch (ControllerException ex) {
            Logger.getLogger(BuscadorContenido.class.getName()).log(Level.SEVERE, null, ex);
            
        }
        
        //Lanza la interfaz de MaterialCurso y se envia como parametro el controlador de este agente para establecer puente interfaz-agente
//        vistaMaterialCurso = new Material2( seguidorAg);
//        vistaMaterialCurso.setVisible(true);
        
//        this.addBehaviour(new Behaviour(this) {
//            public void action() {
//              
//            }
//        });
        this.addBehaviour(new SeguidorContenido.SeguimientoContenidos(this));
    
             
    }
 
    // Finalización del agente
    protected void takeDown()
    {

    }

   
    
    
    
    //Se agregan los  comportamientos del agente
    private class SeguimientoContenidos extends Behaviour
    {  
        public SeguimientoContenidos(Agent a) {
            super(a);
        }
        public void action(){
            MessageTemplate mt = MessageTemplate.and(
                    MessageTemplate.MatchLanguage(codec.getName()),
                    MessageTemplate.MatchOntology(ontologia.getName()));
            ACLMessage mensaje = receive(mt);
            
            if(mensaje != null){
                
//                
//                 if (mensaje.getPerformative() == ACLMessage.AGREE) {
//                    try {
//                        ContentElement ce = getContentManager().extractContent(mensaje);
//                        if (ce instanceof OA_Solicitado) {
//                            OA_Solicitado oa_element = (OA_Solicitado) ce;
//                            OA oa = (OA)oa_element.getOa();
//                            System.out.println("El objeto de aprendizaje: " + oa.getTitulo() + "ha sido solicitado");
//                            
////                            com.mostrarCompra(libro);
//                            
//                            //recibe el estado de avance del curso  
//                        }
//                    } catch (Codec.CodecException ex) {
//                        Logger.getLogger(BuscadorContenido.class.getName()).log(Level.SEVERE, null, ex);
//                    } catch (UngroundedException ex) {
//                        Logger.getLogger(BuscadorContenido.class.getName()).log(Level.SEVERE, null, ex);
//                    } catch (OntologyException ex) {
//                        Logger.getLogger(BuscadorContenido.class.getName()).log(Level.SEVERE, null, ex);
//                    }
//
//                }
                 
                 
//                if (mensaje.getPerformative() == ACLMessage.AGREE) {
//                    try {
//                        ContentElement ce = getContentManager().extractContent(mensaje);
//                        if (ce instanceof LibroComprado) {
//                            LibroComprado lib = (LibroComprado) ce;
//                            Libro libro = lib.getLibro();
//                            System.out.println("El libro: " + libro.getNombre() + "ha sido comprado.");
//                            com.mostrarCompra(libro);
//                        }
//                    } catch (Codec.CodecException ex) {
//                        Logger.getLogger(Comprador.class.getName()).log(Level.SEVERE, null, ex);
//                    } catch (UngroundedException ex) {
//                        Logger.getLogger(Comprador.class.getName()).log(Level.SEVERE, null, ex);
//                    } catch (OntologyException ex) {
//                        Logger.getLogger(Comprador.class.getName()).log(Level.SEVERE, null, ex);
//                    }
//
//                }
            }
            
            
        }
 
        // Comprueba si el comportamiento ha finalizado
        public boolean done(){
            return true;
        }
    }
    

    
}